package controls

import (
	"github.com/labstack/echo/v4"
	"github.com/rs/xid"
	"sofuny/models"
	"sofuny/utils"
	"time"
)

// 友人帐
func FindAllLink(ctx echo.Context) error {
	var links []models.Link
	if err := db.Where("status=?", true).Find(&links).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "查找友人帐失败",
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 返回
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "success",
		Data:  links,
		Total: len(links),
		Time:  utils.FormatTime(),
	})
}

// 添加
func AddLink(ctx echo.Context) error {
	var v utils.Value
	var link models.Link
	// 绑定数据
	if err := ctx.Bind(&v); err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataBindErrorMessage,
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 判断
	if v.Name == "" || v.Url == "" || v.Logo == "" || v.Abstract == "" {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataEmptyMessage,
			Data:  nil,
			Total: 0,
			Time:  utils.FormatTime(),
		})
	}
	// 赋值
	link.CreateAt = time.Now().Local()
	link.UpdateAt = link.CreateAt
	link.Status = false
	link.Uuid = xid.New().String()
	link.Name = v.Name
	link.Url = v.Url
	link.Logo = v.Logo
	link.Abstract = v.Abstract
	// 创建
	if err := db.Create(&link).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "创建友人帐失败",
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 返回数据
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "success",
		Data:  nil,
		Total: 0,
		Time:  utils.FormatTime(),
	})
}

// 后台
// 所有
func AdminFindAllLink(ctx echo.Context) error {
	var links []models.Link
	// 查找
	if err := db.Find(&links).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "查找友人帐失败",
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 返回
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "success",
		Data:  links,
		Total: len(links),
		Time:  utils.FormatTime(),
	})
}

// 添加
func AdminAddLink(ctx echo.Context) error {
	return nil
}

// 修改
func AdminChangeLink(ctx echo.Context) error {
	return nil
}

// 删除
func AdminDeleteLink(ctx echo.Context) error {
	var v utils.Value
	var link models.Link
	// 数据绑定
	if err := ctx.Bind(&v); err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataBindErrorMessage,
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 判断数据
	if v.Uuid == "" {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "uuid不允许为空",
			Data:  nil,
			Total: 0,
			Time:  utils.FormatTime(),
		})
	}
	// 查找句子
	if err := db.Where("uuid=?", v.Uuid).Find(&link).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "获取友人帐失败",
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 执行删除
	if err := db.Unscoped().Delete(&link).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "删除友人帐失败",
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 删除成功
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "删除成功!",
		Data:  nil,
		Total: 0,
		Time:  utils.FormatTime(),
	})
}
